/**
 * 权限校验类，用于检查用户是否有权限访问特定资源或执行某些操作。
 */
class Permission {
    /**
     * 检查用户是否具有指定的角色。
     * @param role - 要检查的角色。
     * @returns 如果用户具有指定的角色，则返回 true；否则返回 false。
     */
    hasRole(role: string): boolean {
      const userRoles = this.getUserRoles();
      return userRoles.includes(role);
    }
  
    /**
     * 检查用户是否具有指定的权限。
     * @param permission - 要检查的权限。
     * @returns 如果用户具有指定的权限，则返回 true；否则返回 false。
     */
    hasPermission(permission: string): boolean {
      const userPermissions = this.getUserPermissions();
      return userPermissions.includes(permission);
    }
  
    /**
     * 检查用户是否具有任意一个指定的权限。
     * @param permissions - 要检查的权限数组。
     * @returns 如果用户具有任意一个指定的权限，则返回 true；否则返回 false。
     */
    hasAnyPermission(permissions: string[]): boolean {
      const userPermissions = this.getUserPermissions();
      return permissions.some(permission => userPermissions.includes(permission));
    }
  
    /**
     * 检查用户是否具有所有指定的权限。
     * @param permissions - 要检查的权限数组。
     * @returns 如果用户具有所有指定的权限，则返回 true；否则返回 false。
     */
    hasAllPermissions(permissions: string[]): boolean {
      const userPermissions = this.getUserPermissions();
      return permissions.every(permission => userPermissions.includes(permission));
    }
  
    /**
     * 获取当前用户的角色列表。
     * @returns 用户的角色列表。
     */
    private getUserRoles(): string[] {
      const roles = localStorage.getItem('userRoles');
      if (roles) {
        try {
          return JSON.parse(roles) as string[];
        } catch (error) {
          console.error('Error parsing user roles from localStorage:', error);
        }
      }
      return [];
    }
  
    /**
     * 获取当前用户的权限列表。
     * @returns 用户的权限列表。
     */
    private getUserPermissions(): string[] {
      const permissions = localStorage.getItem('userPermissions');
      if (permissions) {
        try {
          return JSON.parse(permissions) as string[];
        } catch (error) {
          console.error('Error parsing user permissions from localStorage:', error);
        }
      }
      return [];
    }
  }
  
  // 导出单例实例
  const permission = new Permission();
  export default permission;